//
//  KooCalendarCell.h
//  KooIEDUCalendarDemo
//
//  Created by nowcoder on 2024.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@class KooCalendarCellModel, KooCalendarConfig;

/**
 * 日历日期单元格
 */
@interface KooCalendarCell : UICollectionViewCell

// MARK: - Properties
/** 日期标签 */
@property (nonatomic, strong, readonly) UILabel *dateLabel;

/** 背景视图 */
@property (nonatomic, strong) UIView *customBackgroundView;

/** 当前单元格数据模型 */
@property (nonatomic, strong, nullable) KooCalendarCellModel *cellModel;

/** 配置对象 */
@property (nonatomic, strong, nullable) KooCalendarConfig *config;

// MARK: - Public Methods
/**
 * 配置单元格数据和样式
 * @param cellModel 单元格数据模型
 * @param config 配置对象
 */
- (void)configureCellWithModel:(KooCalendarCellModel *)cellModel config:(KooCalendarConfig *)config;

/**
 * 更新选中状态
 * @param selected 是否选中
 * @param animated 是否使用动画
 */
- (void)setSelected:(BOOL)selected animated:(BOOL)animated;

/**
 * 更新今日标记状态
 * @param isToday 是否是今日
 */
- (void)setTodayMark:(BOOL)isToday;

/**
 * 更新禁用状态
 * @param disabled 是否禁用
 */
- (void)setDisabled:(BOOL)disabled;

/**
 * 重置单元格状态（用于重用）
 */
- (void)resetCellState;

// MARK: - Override Points
/**
 * 子类可重写此方法自定义UI创建
 */
- (void)setupUI;

/**
 * 子类可重写此方法自定义约束设置
 */
- (void)setupConstraints;

/**
 * 子类可重写此方法自定义样式更新
 */
- (void)updateAppearance;

@end

NS_ASSUME_NONNULL_END 